home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / tclMotif-1.4 / send / programs / xmSend2.c < prev    next >
C/C++ Source or Header  |  1995-06-29  |  3KB  |  116 lines

  1. /*
  2.  * A Motif program to send and receive messages to and from a Tk program
  3.  * The Tk program is tkSend, and this one is called xmSend
  4.  */
  5.  
  6. #include <Xm/PushB.h>
  7. #include "../tclXtSend.h"
  8.  
  9. void
  10. SendTo(w, clientData, callData)
  11.     Widget w;
  12.     XtPointer clientData;
  13.     XtPointer callData;
  14. {
  15.     Tcl_Interp *interp = (Tcl_Interp *) clientData;
  16.     char sendCommand[1024];
  17.  
  18.     strcpy(sendCommand,
  19.         "send tkSend {.button configure -text \"Hello from Motif\"}");
  20.     if (Tcl_Eval(interp, sendCommand) != TCL_OK)
  21.     fprintf(stderr, "send failed\n");
  22. }
  23.  
  24. char incrementLabelCmd[] = "\
  25.   proc incrementLabel {} { \n\
  26.     getLabel value \n\
  27.     incr value \n\
  28.     setLabel $value \n\
  29.   } \
  30. ";
  31.  
  32. int
  33. SetLabel(clientData, interp, argc, argv)
  34.     ClientData *clientData;
  35.     Tcl_Interp *interp;
  36.     int argc;
  37.     char **argv;
  38. {
  39.     XmString xmstr;
  40.     Widget w = (Widget) clientData;
  41.  
  42.     if (argc < 2) {
  43.     Tcl_SetResult(interp, "setLabel label", TCL_STATIC);
  44.     return TCL_ERROR;
  45.     }
  46.  
  47.     xmstr = XmStringCreateLocalized(argv[1]);
  48.     XtVaSetValues(w, XmNlabelString, xmstr, NULL);
  49.     XmStringFree(xmstr);
  50.  
  51.     return TCL_OK;
  52. }
  53.  
  54. int
  55. GetLabel(clientData, interp, argc, argv)
  56.     ClientData *clientData;
  57.     Tcl_Interp *interp;
  58.     int argc;
  59.     char **argv;
  60. {
  61.     XmString xmstr;
  62.     String str;
  63.     Widget w = (Widget) clientData;
  64.  
  65.     if (argc < 2) {
  66.     Tcl_SetResult(interp, "getLabel \"label\"", TCL_STATIC);
  67.     return TCL_ERROR;
  68.     }
  69.  
  70.     XtVaGetValues(w, XmNlabelString, &xmstr, NULL);
  71.     XmStringGetLtoR(xmstr, XmFONTLIST_DEFAULT_TAG, &str);
  72.     Tcl_SetVar(interp, argv[1], str, 0);
  73.  
  74.     XtFree(str);
  75.     XmStringFree(xmstr);
  76.  
  77.     return TCL_OK;
  78. }
  79.  
  80. int
  81. main(argc, argv)
  82.     int argc;
  83.     char **argv;
  84. {
  85.     Widget toplevel;
  86.     Widget button;
  87.     Tcl_Interp *interp;
  88.     XtAppContext app;
  89.  
  90.     toplevel = XtAppInitialize(&app, "XmSend", NULL, 0, &argc, argv,
  91.                 NULL, NULL, 0);
  92.  
  93.     button = XmCreatePushButton(toplevel, "1", NULL, 0);
  94.     XtManageChild(button);
  95.  
  96.     XtRealizeWidget(toplevel);
  97.  
  98.     interp = Tcl_CreateInterp();
  99.  
  100.     if (TclXtSend_RegisterInterp(interp, argv[0], toplevel) == TCL_ERROR)
  101.     fprintf(stderr, "couldn't register interpreter %s\n", argv[0]);
  102.  
  103.     /*
  104.      * Create tcl commands based in C, and then load a procedure
  105.      */
  106.     Tcl_CreateCommand(interp, "setLabel", SetLabel, (ClientData *) button,
  107.         (Tcl_CmdDeleteProc *) NULL);
  108.     Tcl_CreateCommand(interp, "getLabel", GetLabel, (ClientData *) button,
  109.         (Tcl_CmdDeleteProc *) NULL);
  110.     Tcl_Eval(interp, incrementLabelCmd);
  111.  
  112.     XtAddCallback(button, XmNactivateCallback, SendTo, (XtPointer) interp);
  113.  
  114.     XtAppMainLoop(app);
  115. }
  116.